package cn.exrick.xboot.chart;

import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;

import java.awt.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class CreateChart {
    /**
     * https://www.e-iceblue.cn/spirexls_java_chart/create-excel-pie-charts-in-java.html
     * @param args
     */
    public static void main(String[] args) {
        ArrayList<String> list =new ArrayList<>();
        list.add("煅烧车间");list.add("煅烧车间");list.add("煅烧车间");list.add("煅烧车间");list.add("煅烧车间");list.add("煅烧车间");
        list.add("成型车间");list.add("成型车间");list.add("成型车间");list.add("成型车间");list.add("成型车间");list.add("成型车间");
        list.add("焙烧一车间");list.add("焙烧一车间");list.add("焙烧一车间");list.add("焙烧一车间");list.add("焙烧一车间");
        list.add("焙烧二车间");list.add("焙烧二车间");list.add("焙烧二车间");list.add("焙烧二车间");list.add("焙烧二车间");
        list.add("生产设备部");list.add("生产设备部");list.add("生产设备部");list.add("生产设备部");list.add("生产设备部");


        Color color_green = new Color(0, 142, 106);
        /**
         * 创建Workbook对象
         */
        Workbook workbook = new Workbook();
        /**
         * 获取第一个工作表
         */
        Worksheet sheet = workbook.getWorksheets().get(0);
        /**
         * TODO 将图表数据写入工作表
         */
        sheet.getCellRange("A1").setValue("绩效考核");
        sheet.getCellRange("A2").setValue("X月车间绩效考核");
        sheet.getCellRange("A3").setValue("车间");
        sheet.getCellRange("B3").setValue("班组");
        sheet.getCellRange("C3").setValue("班长/负责人");
        sheet.getCellRange("D3").setValue("考核人数");
        sheet.getCellRange("E3").setValue("考核次数");
        sheet.getCellRange("G2").setValue("数据统计");
        sheet.getCellRange("G4").setValue("绩效登录人数趋势");
        sheet.getCellRange("G24").setValue("绩效考核次数趋势");
        sheet.getCellRange("G44").setValue("绩效考核平均时间 (车间)");
        sheet.getCellRange("S4").setValue("绩效审批超时统计");


        List<String> list2= list.stream().distinct().collect(Collectors.toList());
        //遍历车间，并合并单元格
        long row=4;
        for (String s:list2){
            long count=list.stream().filter(item->s.equals(item)).count();
            sheet.getCellRange("A"+row).setValue(s);
            sheet.getRange().get("A"+row+":A"+(row+count-1)).merge();
            row+=count;
        }
        //遍历考核数据
        long i=4;
        for (String s:list){
            sheet.getCellRange("B"+(i)).setValue("二月");
            sheet.getCellRange("C"+(i)).setNumberValue(i);
            sheet.getCellRange("D"+(i)).setNumberValue(5000);
            sheet.getCellRange("E"+(i)).setNumberValue(5000);
            i++;
        }


        /**
         * 按范围合并单元格,并设置行高
         */
        //合并单元格
        sheet.getRange().get("A1:V1").merge();
        sheet.getRange().get("A2:E2").merge();
        sheet.getRange().get("G2:V2").merge();
        sheet.getRange().get("G4:Q5").merge();
        sheet.getRange().get("G24:Q25").merge();
        sheet.getRange().get("G44:Q45").merge();
        sheet.getRange().get("S4:V5").merge();

        //设置行高
        sheet.setRowHeight(1,25);
        sheet.setRowHeight(2,20);
        //设置行高、列宽为自适应（应用于指定数据范围）
//        sheet.getAllocatedRange().autoFitRows();
//        sheet.getAllocatedRange().autoFitColumns();
        /**
         * 填充颜色
         */
        sheet.getRange().get("A1:V1").getStyle().setColor(color_green);
        sheet.getRange().get("A3:E3").getStyle().setColor(color_green);
        /**
         * 设置字体
         */

        sheet.getCellRange("A1").getCellStyle().getExcelFont().setFontName("Comic Sans MS");
        sheet.getCellRange("A1").getCellStyle().getExcelFont().setColor(Color.white);
        sheet.getCellRange("A1").getCellStyle().getExcelFont().setSize(16);
        sheet.getCellRange("A1").getCellStyle().getExcelFont().isBold(true);
        sheet.getCellRange("A2").getCellStyle().getExcelFont().setColor(color_green);
        sheet.getCellRange("A2").getCellStyle().getExcelFont().isBold(true);
        sheet.getCellRange("G2").getCellStyle().getExcelFont().setColor(color_green);
        sheet.getCellRange("G2").getCellStyle().getExcelFont().isBold(true);
        sheet.getCellRange("A3:E3").getCellStyle().getExcelFont().setColor(Color.white);
        //图表字体设置
        sheet.getCellRange("G4").getCellStyle().getExcelFont().setColor(color_green);
        sheet.getCellRange("G4").getCellStyle().getExcelFont().isBold(true);
        sheet.getCellRange("G24").getCellStyle().getExcelFont().setColor(color_green);
        sheet.getCellRange("G24").getCellStyle().getExcelFont().isBold(true);
        sheet.getCellRange("G44").getCellStyle().getExcelFont().setColor(color_green);
        sheet.getCellRange("G44").getCellStyle().getExcelFont().isBold(true);
        sheet.getCellRange("S4").getCellStyle().getExcelFont().setColor(color_green);
        sheet.getCellRange("S4").getCellStyle().getExcelFont().isBold(true);

        /**
         * 将合并单元格的对齐方式设置
         */
//        sheet.getRange().get("A2").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Left);
        //水平对齐居中
        sheet.getAllocatedRange().getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center);
        //垂直对齐方式设置为居中
        sheet.getAllocatedRange().getCellStyle().setVerticalAlignment(VerticalAlignType.Center);

        /**
         * 获取单元格，设置内边框、外边框
         */
        CellRange range1 = sheet.getCellRange("A2:E2");
        range1.borderInside(LineStyleType.Thin, color_green);
        range1.borderAround(LineStyleType.Medium, color_green);

        CellRange range2 = sheet.getCellRange("G2:V2");
        range2.borderInside(LineStyleType.Thin, color_green);
        range2.borderAround(LineStyleType.Medium, color_green);

        //绩效登录人数位置
        CellRange range3 = sheet.getCellRange("G4:Q5");
        range3.borderInside(LineStyleType.Thin, color_green);
        range3.borderAround(LineStyleType.Medium, color_green);
        CellRange range4 = sheet.getCellRange("G6:Q21");
        range4.borderInside(LineStyleType.Thin, color_green);
        range4.borderAround(LineStyleType.Medium, color_green);
        //绩效考核次数
        CellRange range5 = sheet.getCellRange("G24:Q25");
        range5.borderInside(LineStyleType.Thin, color_green);
        range5.borderAround(LineStyleType.Medium, color_green);
        CellRange range6 = sheet.getCellRange("G26:Q41");
        range6.borderInside(LineStyleType.Thin, color_green);
        range6.borderAround(LineStyleType.Medium, color_green);
        //绩效考核平均时间（车间）
        CellRange range7 = sheet.getCellRange("G44:Q45");
        range7.borderInside(LineStyleType.Thin, color_green);
        range7.borderAround(LineStyleType.Medium, color_green);
        CellRange range8 = sheet.getCellRange("G46:Q61");
        range8.borderInside(LineStyleType.Thin, color_green);
        range8.borderAround(LineStyleType.Medium, color_green);
        //绩效审批超时统计
        CellRange range9 = sheet.getCellRange("S4:V5");
        range9.borderInside(LineStyleType.Thin, color_green);
        range9.borderAround(LineStyleType.Medium, color_green);
        CellRange range10 = sheet.getCellRange("S6:V21");
        range10.borderInside(LineStyleType.Thin, color_green);
        range10.borderAround(LineStyleType.Medium, color_green);
        /**
         * 添加图表
         */
        //定图表类型
        Chart chart = sheet.getCharts().add(ExcelChartType.LineMarkersStacked);
        Chart chart1 = sheet.getCharts().add(ExcelChartType.LineMarkersStacked);
        number_Of_Trend(chart);
        number_Of_assess( chart1);
        //保存文档
        workbook.saveToFile("output/PieChart.xlsx", ExcelVersion.Version2016);
    }
    public static void number_Of_Trend( Chart chart){
        //设置图表位置
        chart.setLeftColumn(7);
        chart.setTopRow(6);
        chart.setRightColumn(18);
        chart.setBottomRow(22);

        //设置图表标题
        chart.setChartTitle("年销售额");
        chart.getChartTitleArea().isBold(true);
        chart.getChartTitleArea().setSize(12);
        //添加图表系列
        ChartSerie series1 = chart.getSeries().add();
        //定义图表生成所需数据
        series1.setEnteredDirectlyCategoryLabels(new Object[]{"英国", "美国", "中国", "加拿大", "泰国", "新加坡"});
        series1.setEnteredDirectlyValues(new Object[]{254, 221, 438, 158, 250, 300});

        chart.getPrimaryCategoryAxis().setTitle("原产国");
        chart.getPrimaryValueAxis().setTitle("产 量");
        chart.getPlotArea().getFill().setForeColor(new Color(250,235,215));
    }
    public static void number_Of_assess( Chart chart){
        //设置图表位置
        chart.setLeftColumn(7);
        chart.setTopRow(26);
        chart.setRightColumn(18);
        chart.setBottomRow(42);

        //添加图表系列
        ChartSerie series1 = chart.getSeries().add();
        //定义图表生成所需数据
        series1.setEnteredDirectlyCategoryLabels(new Object[]{"英国", "美国", "中国", "加拿大", "泰国", "新加坡"});
        series1.setEnteredDirectlyValues(new Object[]{254, 221, 438, 158, 250, 300});

        //设置图表标题、坐标轴、背景色
        chart.getPlotArea().getFill().setForeColor(new Color(250,235,215));
    }
}
